Twilio を使用した Django SMS 通知システムの構築

Twilio を使用した Django SMS 通知システムの構築

こんにちは、チャールです。

こちらのブログでは、Twilio を使用して SMS 通知を送信する Django アプリケーションを構築します。ユーザー、イベントタイプ、およびイベントを管理し、イベントの1時間前に通知を送信します。また、Twilio の認証情報などの機密情報を管理するために .env ファイルを使用します。

ステップ1:

まず、新しいDjangoプロジェクトとアプリを作成してください。

django-admin startproject sms_alerts
cd sms_alerts
django-admin startapp alerts

ステップ2:

Twilioパッケージと__django-environ__をインストールして、環境変数を管理してください。

pip install twilio django-environ

ステップ3:

sms_alerts/settings.pyのINSTALLED_APPSにalertsを追加してください。

INSTALLED_APPS = [
...
'alerts',
]

ステップ4:

プロジェクトのルートディレクトリ(manage.pyがある場所)に.envファイルを作成してください。.envファイルにTwilioの認証情報とTwilioの電話番号を追加してください。

TWILIO_ACCOUNT_SID=your_account_sid
TWILIO_AUTH_TOKEN=your_auth_token
TWILIO_PHONE_NUMBER=your_twilio_phone_number

Screenshot 2024-09-26 at 17.53.30

ステップ5:

alerts/models.pyでモデルを定義してください。

from django.db import models

class EventType(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class User(models.Model):
    phone_number = models.CharField(max_length=15, unique=True)

    def __str__(self):
        return self.phone_number

class Event(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    event_type = models.ForeignKey(EventType, on_delete=models.CASCADE)
    event_time = models.DateTimeField()

    def __str__(self):
        return f"{self.event_type.name} for {self.user.phone_number} at {self.event_time}"

データベースにテーブルを作成するためにマイグレーションを実行してください。

python manage.py makemigrations
python manage.py migrate

ステップ6:

Django管理インターフェースで管理できるように、alerts/admin.pyでモデルを登録してください。

from django.contrib import admin
from .models import User, Event, EventType

admin.site.register(User)
admin.site.register(Event)
admin.site.register(EventType)

ステップ7:

Twilioを使用してSMSメッセージを送信するために、alerts/services.pyを作成してください。

import os
from twilio.rest import Client
import environ

env = environ.Env()
environ.Env.read_env(os.path.join(os.path.dirname(__file__),'../.env'))

TWILIO_ACCOUNT_SID = env('TWILIO_ACCOUNT_SID')
TWILIO_AUTH_TOKEN = env('TWILIO_AUTH_TOKEN')
TWILIO_NUMBER = env('TWILIO_NUMBER')

def send_sms(phone_number, message):
    client = Client(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)
    message = client.messages.create(body=message, from_=TWILIO_NUMBER, to=phone_number)
    return message.sid

ステップ8:

定期的に通知をチェックして送信するために、カスタムのDjango管理コマンドを作成してください。

mkdir -p alerts/management/commands
touch alerts/management/commands/send_notifications.py

send_notifications.pyに以下のコードを追加してください:

import time
from django.core.management.base import BaseCommand
from datetime import timedelta
from django.utils import timezone
from ...models import Event
from ...services import send_sms
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

class Command(BaseCommand):
    help = 'Run the scheduler to send notification 1 hour before the event time'

    def handle(self, *args, **kwargs):
        while True:
        now = timezone.now()
        one_hour_later = now + timedelta(hours=1)
        events = Event.objects.filter(event_time__range=(now, one_hour_later))

        if not events.exists():
            logger.info("No events exists")

        for event in events:
            message = f"Reminder: You have a {event.event_type.name} at {event.event_time}"
            try:
                send_sms(event.user.phone_number, message)
                logger.info(f'Successfully sent reminder to {event.user.phone_number}')

            except Exception as e:
                logger.error(f'Failed to sent reminder to {event.user.phone_number}')

        time.sleep(60)

ステップ9:

Django管理インターフェースにアクセスするためのスーパーユーザーを作成し、プロンプトに従ってください。

python manage.py createsuperuser

ステップ10:

Django開発サーバーを起動してください。

python manage.py runserver

新しいターミナルでスケジューラーコマンドを実行してください。

python manage.py send_notifications

ステップ11:

  • Djangoの管理インターフェースにアクセスしてください。URLは http://127.0.0.1:8000/admin/ です。
  • 管理者の資格情報でログインしてください。
  • 管理インターフェースを通じて、ユーザー、イベントタイプ、イベントを追加してください。

Screenshot 2024-09-26 at 17.38.34

Screenshot 2024-09-26 at 17.52.19

まとめ:

これらのステップに従うことで、Twilioを使用してSMS通知を送信するDjangoアプリケーションを作成しました。Django管理インターフェースを通じてユーザー、イベントタイプ、イベントを管理し、イベントの1時間前に通知を送信できます。

ありがとうございます!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.